﻿/*
 * Created by SharpDevelop.
 * User: BadaninMV
 * Date: 06.02.2015
 * Time: 13:50
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using MySql.Data.MySqlClient;

namespace Region
{
  /*	
	76	LastEdit	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	74	StatusVip	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	75	Del	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
*//*	
	6	Date	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	
	13	Result	text	utf8_unicode_ci		Нет 	Нет		Изменить Изменить	Удалить Удалить	
	14	Defination	text	utf8_unicode_ci		Нет 	Нет		Изменить Изменить	Удалить Удалить	
	19	Lab1	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	20	Lab2	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	21	Lab3	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	22	Lab4	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	23	Lab5	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	24	Lab6	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	25	Lab7	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	26	Lab8	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	27	Lab9	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	28	Lab10	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	
	30	Mery1	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	31	Mery2	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	32	Mery3	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	33	Mery4	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	34	Mery5	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	35	Mery6	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	36	Mery7	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	37	Mery8	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	38	AD1	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	39	AD2	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	40	AD3	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	41	AD4	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	42	AD5	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	43	AD6	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	44	AD7	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	45	AD8	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	46	Sum1	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	47	Sum2	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	48	Sum3	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	49	Sum4	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	50	Nac1	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	51	Nac2	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	52	Nac3	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	53	Nac4	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	54	Nac5	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	55	Nac6	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	56	Nac7	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	57	Nac8	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	58	TH1	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	59	TH2	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	60	TH3	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	61	TH4	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	62	TH5	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	63	RS3	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	64	RS4	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	65	RS5	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	66	OK1	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	67	OK2	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	68	OK3	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	69	OK4	int(11)			Нет 	-1		Изменить Изменить	Удалить Удалить	
	70	RucPodpis	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	71	RucComment	text	utf8_unicode_ci		Нет 	Нет		Изменить Изменить	Удалить Удалить	
	72	NachPodpis	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	73	NachComment	text	utf8_unicode_ci		Нет 	Нет		Изменить Изменить	Удалить Удалить	
	74	StatusVip	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	75	Del	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	76	LastEdit	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	77	Online	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	78	OnlineID	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	79	RangH	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	80	RangD	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	81	PovodID	int(11)			Нет 	Нет		Изменить Изменить	Удалить Удалить	
	82	DefEndID	int(11   
   */
  [DBObject(Table = "def", PrimaryKeyPole = "DefID")]
  public class Def : DBObject
  {
    const String FileTemplateRTF="Template/Raspor.rtf";
    #region Поля Определения
    [DBColumn]
    public Int32 DefID { get; set; }
    [DBColumn]
    public Int32 DefNum { get; set; }
    [DBColumn]
    public Int32 DefYear { get; set; }
    [DBColumn]
    public Int32 OtdelID { get; set; }
    [DBColumn]
    public Int32 IspUserID { get; set; }
    [DBColumn]
    public Int32 KontID { get; set; }
    [DBColumn]
    public Int32 KontObjectID { get; set; }

    [DBColumn]
    public Int32 NumNar { get; set; }
    [DBColumn]
    public Int32 ArticleID { get; set; }
    [DBColumn]
    public Int32 RucPodpis { get; set; }
    [DBColumn]
    public Int32 NachPodpis { get; set; }

    [DBColumn]
    public Int32 OnlineID { get; set; }
    [DBColumn]
    public Int32 RangH { get; set; }
    [DBColumn]
    public Int32 RangD { get; set; }
    [DBColumn]
    public bool StatusVip { get; set; }
    //Date
    [DBColumn(PoleType = EPoleType.RegionDate)]
    public RegionDate Date { get; set; }
    [DBColumn(PoleType = EPoleType.RegionDate)]
    public RegionDate Start { get; set; }
    [DBColumn(PoleType = EPoleType.RegionDate)]
    public RegionDate End { get; set; }
    [DBColumn(PoleType = EPoleType.RegionDate)]
    public RegionDate FStart { get; set; }
    [DBColumn(PoleType = EPoleType.RegionDate)]
    public RegionDate FEnd { get; set; }
    //String
    [DBColumn]
    public String RucComment { get; set; }
    [DBColumn]
    public String NachComment { get; set; }
    [DBColumn]
    public String FIO_DL { get; set; }
    [DBColumn]
    public String Titul { get; set; }
    [DBColumn]
    public String Places { get; set; }
    [DBColumn]
    public Otdel Otdel { get; set; }
    [DBColumn]
    public User IspUser { get { return m_engine.getUser(IspUserID); } set { IspUserID = value.UserID; } }
    public User Nach{get{return m_engine.getUser(NachPodpis);} set{ NachPodpis = value.UserID;}}
    public User Ruc{get{return m_engine.getUser(RucPodpis);} set{ RucPodpis = value.UserID;}}
    public Kont Kont{get{return m_engine.getKont(KontID);} set{ KontID = value.KontID;}}
    /**/
    #endregion   
    #region Протоколы      
    Dictionary<Int32,Protokol> m_Protokols;
    public Dictionary<Int32,Protokol> Protokols
    {        
      get
      {
        if (m_Protokols==null) 
        {
          m_Protokols = new Dictionary<Int32, Protokol>();
          SQLResult R = m_engine.SQLSelect("SELECT ProtokolID FROM protokol WHERE DefID=@DefID",new SQLParam() { { "@DefID", DefID } });
          for(int i=0;R.ContainsKey(i);i++)
          {
            var ProtokolID = (Int32)R[i]["ProtokolID"];
            m_Protokols.Add(ProtokolID,m_engine.getProtokol(ProtokolID));
          }
        }
        return m_Protokols;
      }
    }
    #endregion
    #region Переопределённые методы DBObject
    public override bool save()
    {
      return base.save();
    }
    public override bool isEdit()
    {
      return base.isEdit();
    }
    public override bool read(MySqlConnection RegionDB=null)
    {
      
      
      return base.read(RegionDB);
    }
    /// <summary>Не редактируемые поля. доступны только для администратор</summary>
    static private Dictionary<String, bool> Access_NoEdit = new Dictionary<String, bool>() { { "DefID", true }, { "DefNum", true }, { "DefYear", true }, { "StatusVip", true }, { "RucPodpis", true }, { "NachPodpis", true } };
    /// <summary>Поля закрываемые подписью</summary>
    static private Dictionary<String, bool> Access_BasePoles = new Dictionary<String, bool>() { { "Date", true }, { "CheckDoc", true }, { "CheckGo", true }, { "CheckPlan", true }, { "CheckLicen", true }, { "Pred", true }, { "OsnovID", true }, { "OtdelID", true }, { "IspUserID", true }, { "KontID", true }, { "TP", true }, { "Start", true }, { "End", true }, { "IspInfo", true }, { "ExpertsInfo", true }, { "TargetInfo", true }, { "TaskInfo", true }, { "OsnovInfo", true }, { "MKontrInfo", true }, { "AReglamInfo", true }, { "PDocInfo", true }, { "RucComment", true }, { "NachComment", true }, { "Action_StatusVip", true }, { "Action_RucPodpis", true }, { "Action_NachPodpis", true } };
    public override bool poleCheck(String PoleName, Object Value) { return true; }
    public override bool poleAccess(String PoleName)
    {
        //Не редактируемые поля
        if (Access_NoEdit.ContainsKey(PoleName)) return false;
        // Администратору вообще многое можно           
        if (m_engine.isAccess("Admin")) return true;
        //Основные поля распоряжения
        if (Access_BasePoles.ContainsKey(PoleName))
        {
            //if (m_engine.isAccess("Admin")) return true;
            // Обработка доступа по подписям
            if (m_engine.isAccess("RucPodpis") && PoleName == "Action_RucPodpis") return true;
            if (m_engine.isAccess("RucPodpis") && PoleName == "RucComment") return true;
            if (RucPodpis > 0) return false;
            if (m_engine.isAccess("RucPodpis")) return true;
            if (m_engine.isAccess("NachPodpis") && PoleName == "Action_NachPodpis") return true;
            if (m_engine.isAccess("NachPodpis") && PoleName == "NachComment") return true;
            if (NachPodpis > 0) return false;
            if (m_engine.isAccess("NachPodpis")) return true;
            if (m_engine.isAccess("RasporEdit") && PoleName == "Action_StatusVip") return true;
            if (StatusVip) return false;
        }
        //Разрешить исполнитулю редактировать поля если они не запрещены правилами выше
        if (IspUserID == m_engine.CurrentUser.UserID) return true;
        return false;//Нет явынх править занчит надо запретить            
    }
    #endregion
    /// <summary>Проверить и получить список ошибок в распоряжении</summary><returns>Список ошибок</returns>
    public List<String> check()
    {
      List<String> L = new List<string>();
      if (Date.Year != DefYear)
        L.Add("Указана не верная дата распоряжения. " + Date.ToShortDateString());
      if (Start.Year < DefYear && Start.Year > DefYear + 1)
        L.Add("Указана не верная дата начала проверки. " + Start.ToShortDateString());
      if (End.Year < DefYear && End.Year > DefYear + 1)
        L.Add("Указана не верная дата окончания проверки. " + End.ToShortDateString());
      if (Date > Start)
        L.Add("Проверка не может начатся раньше чем выписано распоряжение. ");
      if (Start > End)
        L.Add("Проверка не может закончится раньше её начала. ");
      if (KontID == 0)
        L.Add("[Пункт 1] Не выбран контрагент. ");
      else
      {
        Kont kont = m_engine.getKont(KontID);
        L.AddRange(kont.checkKont());
      }
      if (IspUserID == 0)
        L.Add("Не указан исполнитель. ");
      return L;
    }
    public Def(Engine engine, Int32 DefID)
        : base(engine, "def", "DefID", DefID)
    {
    }
  }
    /// <summary> Класс RasporList обеспечивает работу со списками распоряжиний </summary>
  public struct DefListLine
  {
    public Int32 DefID;
    public Int32 DefNum;
    public DateTime Date;
    public Int32 OnlineID;
    public String KontName;
    public String IspFIO;
    public bool Podpis;
    public bool StatusVip;
    public String RucComment;
  }
  public class DefList:DBList<DefListLine>
  {
    //Кеш списка отделов
    Dictionary<Int32, Dictionary<Int32, String>> m_IspUserList = new Dictionary<Int32, Dictionary<Int32, String>>();
    /// <summary>Возвращает список исполнителей у которых есть хотяб одно распоряжение</summary>
    /// <param name="ParentOtdelID">Отдел</param>        
    public Dictionary<Int32,String> IspUserList( Int32 ParentOtdelID)
    {
      if (m_IspUserList.ContainsKey(ParentOtdelID)) return m_IspUserList[ParentOtdelID];
      var FIO = new List<String>();
      var ID = new List<Int32>();
      Dictionary<Int32,String> R = new Dictionary<int,string>();
      SQLResult r = m_engine.SQLSelect(@"
SELECT def.IspUserID, FIO 
FROM def 
LEFT JOIN users ON users.UserID = def.IspUserID 
INNER JOIN otdel_otdel ON otdel_otdel.OtdelID=def.OtdelID
WHERE  otdel_otdel.ParentOtdelID=@ParentOtdelID
GROUP BY def.IspUserID", new SQLParam() { { "@ParentOtdelID", ParentOtdelID } });
      for (int i = 0; i < r.Count; i++) R[(Int32)r[i]["IspUserID"]] = (String)r[i]["FIO"];
      m_IspUserList[ParentOtdelID] = R;
      return R;
    }    
    /// <summary>Возмращает минимальный и максимальный год выписки распоряжений</summary>
    /// <param name="MinYear"></param><param name="MaxYear"></param>
    public void MinMaYear(out Int32 MinYear, out Int32 MaxYear)
    {
      SQLResult r = m_engine.SQLSelect("SELECT MIN(DefYear) AS MinYear, MAX(DefYear) AS MaxYear FROM def WHERE 1");
      if (r.Count == 1)
      {
        MinYear = (Int32)r[0]["MinYear"];
        MaxYear = (Int32)r[0]["MaxYear"];
      }
      else
      {
        MinYear = DateTime.Now.Year;
        MaxYear = DateTime.Now.Year;
      }
    }
    public DefList(Engine engine):base(engine)
    {
      DefaultPoles.Add("def.DefID");
      DefaultPoles.Add("def.OnlineID");
      DefaultPoles.Add("def.RucPodpis");
      DefaultPoles.Add("def.DefNum");
      DefaultPoles.Add("def.Date");
      DefaultPoles.Add("def.StatusVip");
      DefaultPoles.Add("kont.KontName");
      DefaultPoles.Add("isp.FIO AS IspFIO");
      DefaultTables.Add("def");
      DefaultTables.Add("LEFT JOIN kont ON kont.KontID=def.KontID");
      DefaultTables.Add("LEFT JOIN users AS isp ON isp.UserID=def.IspUserID");
      DefaultOrderBy.Add("def.DefNum DESC");
    }
    
    protected override void ProceessWheres(SQLParam Params,List<String> Tables, List<String> Poles,List<String> Wheres,List<String> OrderBy)
    {
      Int32 DefID, ParentOtdelID, DefYear, DefNumStart, DefNumEnd, IspUserID, LineInPage, Page;
      if (m_wheres.ContainsKey("NoPodpis") && (bool)m_wheres["NoPodpis"])
      {
        Wheres.Add("def.RucPodpis=0");               
      }
      if (m_wheres.ContainsKey("Podpis") && (bool)m_wheres["Podpis"])
      {
        Wheres.Add("def.RucPodpis<>0");               
      }
      foreach(String Pole in new String[]{"Start", "End","FStart", "FEnd","Date"})
      {            
        if (m_wheres.ContainsKey(Pole + "Start"))
        { 
          var date = m_wheres[Pole + "Start"] as RegionDate;
          if (date==null&& m_wheres[Pole + "Start"] is DateTime)
              date = new RegionDate((DateTime)m_wheres[Pole + "Start"]);
          if (date!=null && !(date.Empty))
          {
            Wheres.Add("def." + Pole + " >= @" + Pole + "Start");
            Params["@" + Pole + "Start"] = date.getRegionDate();
          }
        }
        if (m_wheres.ContainsKey(Pole + "End"))
        {
          var date = m_wheres[Pole + "End"] as RegionDate;
          if (date==null&& m_wheres[Pole + "End"] is DateTime)
              date = new RegionDate((DateTime)m_wheres[Pole + "End"]);
          if (date!=null && !(date.Empty))
          {
            Wheres.Add("def." + Pole + " < @" + Pole + "End");
            Params["@" + Pole + "End"] = date.getRegionDate();
          }
        }
      }
      if (m_wheres.ContainsKey("DefID") && m_wheres["DefID"] != null && Int32.TryParse(m_wheres["DefID"].ToString(), out DefID))
      {
        Wheres.Add("def.DefID=@DefID");
        Params["@DefID"] = DefID;
      }
      if (m_wheres.ContainsKey("ParentOtdelID") && m_wheres["ParentOtdelID"] != null && Int32.TryParse(m_wheres["ParentOtdelID"].ToString(), out ParentOtdelID))
      {
        Tables.Add("INNER JOIN otdel_otdel ON otdel_otdel.OtdelID=def.OtdelID");
        Wheres.Add("otdel_otdel.ParentOtdelID=@ParentOtdelID");
        Params["@ParentOtdelID"] = ParentOtdelID;
      }
      if (m_wheres.ContainsKey("DefYear") && m_wheres["DefYear"] != null && Int32.TryParse(m_wheres["DefrYear"].ToString(), out DefYear) && DefYear>0)
      {
        Wheres.Add("def.DefYear=@DefYear");
        Params["@DefYear"] = DefYear;
      }

      if (m_wheres.ContainsKey("DefNumStart") && m_wheres["DefNumStart"] != null && Int32.TryParse(m_wheres["DefNumStart"].ToString(), out DefNumStart) && DefNumStart > 0)
      {
        Wheres.Add("def.DefNum>=@DefNumStart");
        Params["@DefNumStart"] = DefNumStart;
      }
      if (m_wheres.ContainsKey("DefNumEnd") && m_wheres["DefNumEnd"] != null && Int32.TryParse(m_wheres["DefNumEnd"].ToString(), out DefNumEnd) && DefNumEnd > 0)
      {
        Wheres.Add("def.DefNum<=@DefNumEnd");
        Params["@DefNumEnd"] = DefNumEnd;
      }
      if (m_wheres.ContainsKey("IspUserID") && m_wheres["IspUserID"] != null && Int32.TryParse(m_wheres["IspUserID"].ToString(), out IspUserID) && IspUserID>0)
      {
        Wheres.Add("def.IspUserID=@IspUserID");
        Params["@IspUserID"] = IspUserID;
      }
    }    
    protected override DefListLine readLine(Dictionary<String, Object> r)
    {
      var l = new DefListLine();
        l.DefID = (Int32)r["DefID"];
        l.DefNum = (Int32)r["DefNum"];
        l.OnlineID = (Int32)r["OnlineID"];
        try { l.KontName = Engine.RegionStringToString((String)r["KontName"]); }
        catch { l.KontName = ""; }
        try { l.IspFIO = Engine.RegionStringToString((String)r["IspFIO"]); }
        catch { l.IspFIO = ""; }
        l.Date = Engine.IntToRegionDate((Int32)r["Date"]);
        l.Podpis = ((Int32)r["RucPodpis"] > 0);
        l.StatusVip = (Boolean)((Int32)r["StatusVip"]!=0);
      return l;
    }    
  }
  public partial class Engine
  {
      /// <summary> Список открытых распояжений </summary>
      private Dictionary<Int32, Def> l_Def;
      /// <summary> Получить распоряжение по его идентификатору</summary><param name="DefID">ИД Распоряжения</param><returns>Объект распоряжения</returns>
      public Def getDef(Int32 DefID)
      {
        if (l_Def == null) l_Def = new Dictionary<Int32, Def>();
        if (l_Def.ContainsKey(DefID)) return (Def)l_Def[DefID];
        var def = new Def(this, DefID);
        l_Def[DefID] = def;
        return def;
      }
      /// <summary>Создать новое распоряжение</summary><param name="BaseRasporID">Идентификатор распоряжения на основе которого создаётся распоряжение</param><returns>Идентификатор нового расоряжения</returns>
      /*public Int32 newRaspor(Int32 BaseRasporID)
      {
        var Param = new SQLParam();
        Param["@RasporYear"] = DateTime.Now.Year;
        Param["@Date"] = RegionDateToInt(DateTime.Now);
        Param["@IspUserID"] = CurrentUser.UserID;
        Param["@OtdelID"] = CurrentUser.OtdelID;
        var Poles = new String[] { "CheckPlan", "CheckDoc", "CheckGo", "ExpertsInfo", "TargetInfo", "TaskInfo", "Pred", "TP", "OsnovID", "MKontrInfo", "AReglamInfo", "PDocInfo", "OsnovInfo" };
        var SqlPoles = new String[0];
        String SqlPolesN = "";
        //foreach (String Pole in Poles) Param["@" + Pole] = "";

        if (BaseRasporID > 0)
        {
          Raspor raspor = getRaspor(BaseRasporID);
          SqlPoles = Poles;
          foreach (String Pole in Poles)
          {
            Param["@" + Pole] = raspor.getPole(Pole);
            SqlPolesN += ", @" + Pole + " AS " + Pole;
          }
        }
        MySqlCommand cmd;
        SQLEdit(@"
INSERT INTO raspor(RasporNum,RasporYear,Date,IspUserID,OtdelID " + ((SqlPoles.Length > 0) ? ", " : "") + String.Join(" ,", SqlPoles) + @") 
SELECT R1.RasporNum+1 AS RasporNum, @RasporYear AS RasporYear, @Date AS Date, 
@IspUserID AS IspUserID, @OtdelID AS OtdelID " + SqlPolesN + @"
FROM raspor AS R1 
LEFT JOIN raspor AS R2 ON (R2.RasporNum=R1.RasporNum+1 AND R2.RasporYear=@RasporYear ) 
WHERE R2.RasporNum IS NULL AND R1.RasporYear=@RasporYear 
ORDER BY R1.RasporNum 
LIMIT 1", Param, out cmd);
        return (Int32)cmd.LastInsertedId;
      }*/
      /// <summary>Удалить распоряжение</summary><param name="RasporID">ИД распоряжения</param><returns>true - если распоряжение было удалено</returns>
      /*public bool delDef(Int32 RasporID)
      {
        Raspor raspor = getRaspor(RasporID);
        if (!CurrentUser.isAccess("EditRaspor")) return false;// Пользователь неимеет права удалять распоряжения            
        if (!CurrentUser.isAccess("Admin") && CurrentUser.OtdelID != raspor.OtdelID && !Otdels[CurrentUser.OtdelID].isSubOtdel(raspor.OtdelID)) return false;//нельзя удалить черновик другово отдела
        var Param = new SQLParam();
        Param["RasporID"] = RasporID;
        //Удалить само распоряжение
        Int32 N = SQLEdit("DELETE FROM raspor WHERE RasporID=@RasporID AND RucPodpis=0 AND NachPodpis=0 AND StatusVip=0", Param);
        if (N == 1) // Распоряжение действительно удалено. 
        {
          l_Raspor.Remove(RasporID);
          //Удалить выбранные объекты
          SQLEdit("DELETE FROM rasporobject WHERE RasporID=@RasporID", Param);
          //Удалить проверяющих из проверки
          SQLEdit("DELETE FROM rasporuser WHERE RasporID=@RasporID", Param);
          return true;
        }
        return false;
      }*/
  }  
}